package utils

import (
	"encoding/json"
	"os"
	"zinx/ziface"
)

// 全局配置
type GlobalObj struct {
	TcpServer ziface.Isever //当前全局的Server对象
	Host      string        // 当前主服务器主机监听的IP
	TcpPort   int           // 当前主服务器监听的端口号
	Name      string        // 当前主服务器的名称

	Version          string // 当前ZINX的版本号
	MaxConn          int    // 当前服务器主机允许的最大链接数
	MaxPackageSize   uint32 // 当前ZINX框架数据包的最大值
	WorkerPoolSize   uint32 // 当前业务工作worker池的Goroutine数量
	MaxWorkerTaskLen uint32 // 每个worker对应的消息队列的任务的数量的最大值
}

// 定一个全局的对外的GlobalObj
var GlobalObject *GlobalObj

func (g *GlobalObj) Reload() {
	data, err := os.ReadFile("conf/zinx.json")
	if err != nil {
		panic(err)
	}
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}
}

// 初始化 GlobalObject
func init() {
	// 没有加载配置文件的默认值
	GlobalObject = &GlobalObj{
		Name:             "",
		Version:          "V0.5",
		TcpPort:          8999,
		Host:             "0.0.0.0",
		MaxConn:          1000,
		MaxPackageSize:   4096,
		WorkerPoolSize:   10,   // 工作池的worker最大值
		MaxWorkerTaskLen: 1024, // 每个worker对应的消息队列的任务的数量最大值
	}

	GlobalObject.Reload()
}
